package demo;

public class Solution {
    //使用StringBuilder可修改
    //递归解决
    StringBuilder sb=new StringBuilder();
    private  void dfs(TreeNode root){
        //如果只有根结点不用加括号
        sb.append(root.val);//根
        //如果只有左孩子，左右加括号
        if(root.left!=null&&root.right==null){
            sb.append("(");
            //递归所有左孩子
            dfs(root.left);//左
            sb.append(")");
        }
        //如果只有右孩子 前面加双括号表示左孩子为空 再给右孩子加括号
        if(root.left==null&&root.right!=null){
            sb.append("()");
            sb.append("(");
            //递归所有右孩子
            dfs(root.right);
            sb.append(")");
        }
        //如果左右都有孩子，左右孩子都加括号
        if(root.left!=null&&root.right!=null){
            sb.append("(");
            //递归所有左孩子
            dfs(root.left);
            sb.append(")");
            sb.append("(");
            //递归所有右孩子
            dfs(root.right);
            sb.append(")");
        }
    }

    public String tree2str(TreeNode root) {
        //如果根为空 直接返回StringBuilder
        if(root==null){
            return sb.toString();
        }else{
            //否则根不为空
            //调用加括号方法
            dfs(root);
        }
        //加完括号以后调用toString()方法 返回加完括号的字符串
        return sb.toString();
    }
}